package com.sunvua.water_mark;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.media.Image;
import android.os.Build;

import androidx.annotation.RequiresApi;

import java.util.List;
import java.util.function.Consumer;

public class JaveImageUtil {
    /**
     * 给一张Bitmap添加水印文字。
     *
     * @param src      源图片
     * @param content  水印文本
     * @param textSize 水印字体大小 ，单位pix。
     * @param color    水印字体颜色。
     * @param x        起始坐标x
     * @param y        起始坐标y
     * @param recycle  是否回收
     * @return 已经添加水印后的Bitmap。
     */
    public static Bitmap addTextWatermark(Bitmap src, String content, int textSize, int color, float x, float y, boolean recycle) {
        if (isEmptyBitmap(src) || content == null)
            return null;
        Bitmap ret = src.copy(src.getConfig(), true);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        Canvas canvas = new Canvas(ret);
        paint.setColor(color);
        paint.setTextSize(textSize);
        Rect bounds = new Rect();
        paint.getTextBounds(content, 0, content.length(), bounds);
        canvas.drawText(content, x, y, paint);
        if (recycle && !src.isRecycled())
            src.recycle();
        return ret;
    }

    /**
     * 给一张Bitmap添加水印文字。
     *
     * @param src      源图片
     * @param content  水印文本
     * @param textSize 水印字体大小 ，单位pix。
     * @param color    水印字体颜色。
     * @param x        起始坐标x
     * @param y        起始坐标y
     * @param recycle  是否回收
     * @return 已经添加水印后的Bitmap。
     */

    public static Bitmap addTextWatermark(Bitmap src, List<String> content, int textSize, int color, float x, float y, boolean recycle) {
        if (isEmptyBitmap(src) || content == null)
            return null;
        Bitmap ret = src.copy(src.getConfig(), true);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        Canvas canvas = new Canvas(ret);
        paint.setColor(color);
        paint.setTextSize(textSize);
        Rect bounds = new Rect();
        for (int i = 0; i < content.size(); i++) {
            paint.getTextBounds(content.get(i), 0, content.get(i).length(), bounds);
            canvas.drawText(content.get(i), x, y+(textSize*i), paint);
        }

        if (recycle && !src.isRecycled())
            src.recycle();
        return ret;
    }
/**
        * Bitmap对象是否为空。
            */
    public static boolean isEmptyBitmap(Bitmap src) {
        return src == null || src.getWidth() == 0 || src.getHeight() == 0;
    }



    /**
     * 给图片添加文字水印
     *
     * @param pressText 水印文字
     * @param srcImageFile 源图像地址
     * @param destImageFile 目标图像地址
     * @param fontName 字体名称
     * @param fontStyle 字体样式
     * @param color 字体颜色
     * @param fontSize 字体大小
     * @param x 修正值
     * @param y 修正值
     * @param alpha 透明度：alpha 必须是范围 [0.0, 1.0] 之内（包含边界值）的一个浮点数字
     */
//    public final static void pressText2(String pressText, String srcImageFile, String destImageFile, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha, int wz) {
//        try {
//            Image src = toBufferedImage(srcImageFile);
//            int width = src.getWidth(null);
//            int height = src.getHeight(null);
//            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//            Graphics2D g = image.createGraphics();
//            g.drawImage(src, 0, 0, width, height, null);
//            g.setColor(color);
//            g.setFont(new Font(fontName, fontStyle, fontSize));
//            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
//            Map<String, Integer> map = getPoint(width, (getLength(pressText) * fontSize), height, fontSize, wz, x, y);
//            // 在指定坐标绘制水印文字
//            g.drawString(pressText, map.get("_x"), map.get("_y") + fontSize);
//            g.dispose();
//            Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg");
//            if (iter.hasNext()) {
//                ImageWriter writer = iter.next();
//                ImageWriteParam param = writer.getDefaultWriteParam();
//                param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
//                param.setCompressionQuality(1.0f);	//最高质量
//                File file=new File(destImageFile);
//                FileImageOutputStream out = new FileImageOutputStream(file);
//                writer.setOutput(out);
//                // writer.write(bi);
//                writer.write(null, new IIOImage((BufferedImage) image, null, null), param);
//                out.close();
//                writer.dispose();
//            }
//            //ImageIO.write((BufferedImage) image, "JPG", new File(destImageFile));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }




}
